ORM 使用 (SQLAlchemy)

概述

对象关系映射(ORM)是一种技术,它允许开发者使用面向对象的编程语言来操作数据库,而不需要直接编写SQL语句。SQLAlchemy 是 Python 中最流行的 ORM 工具之一,它提供了强大的功能来简化数据库操作。

在本教程中,我们将学习如何使用 SQLAlchemy 来创建数据库模型、执行查询、插入数据等操作。

安装 SQLAlchemy

首先,我们需要安装 SQLAlchemy。你可以使用 pip 来安装:

pip install sqlalchemy

连接数据库

在使用 SQLAlchemy 之前,我们需要先连接到数据库。SQLAlchemy 支持多种数据库,如 SQLite、MySQL、PostgreSQL 等。这里我们以 SQLite 为例。

from sqlalchemy import create_engine

# 创建一个 SQLite 数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)

echo=True 参数用于在控制台输出 SQL 语句,方便调试。

定义数据模型

在 SQLAlchemy 中,数据模型是通过 Python 类来定义的。每个类对应数据库中的一张表,类的属性对应表中的列。

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# 创建一个基类
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

    def __repr__(self):
        return f"<User(name='{self.name}', age={self.age})>"

在这个例子中,我们定义了一个 User 类,它对应数据库中的 users 表。id 是主键,name 和 age 是普通列。

创建表

定义好数据模型后,我们需要在数据库中创建相应的表。

Base.metadata.create_all(engine)

这行代码会在数据库中创建 users 表。

插入数据

接下来,我们可以向表中插入数据。

from sqlalchemy.orm import sessionmaker

# 创建一个会话类
Session = sessionmaker(bind=engine)

# 创建一个会话实例
session = Session()

# 创建一个 User 对象
new_user = User(name='Alice', age=30)

# 将对象添加到会话中
session.add(new_user)

# 提交会话
session.commit()

查询数据

我们可以使用 SQLAlchemy 提供的查询接口来获取数据。

# 查询所有用户
users = session.query(User).all()
for user in users:
    print(user)

# 查询特定用户
alice = session.query(User).filter_by(name='Alice').first()
print(alice)

更新数据

更新数据也非常简单。

# 更新 Alice 的年龄
alice.age = 31
session.commit()

删除数据

删除数据同样简单。

# 删除 Alice
session.delete(alice)
session.commit()

实践练习

练习 1: 创建多个表

  1. 创建一个新的数据模型 Book,包含 id、title 和 author 列。
  2. 在数据库中创建 books 表。
  3. 插入几本书的数据。
  4. 查询并打印所有书籍。

练习 2: 多表关联

  1. 修改 User 模型,添加一个 books 属性,表示用户拥有的书籍。
  2. 修改 Book 模型,添加一个 user_id 外键,关联到 User 表。
  3. 插入一些用户和书籍数据,确保每个书籍都关联到一个用户。
  4. 查询并打印每个用户的书籍列表。

总结

通过本教程,我们学习了如何使用 SQLAlchemy 进行数据库操作。SQLAlchemy 提供了强大的功能来简化数据库操作,使得开发者可以更专注于业务逻辑的实现。希望你能通过实践练习进一步巩固所学知识。

参考资料

继续学习,你将能够掌握更多高级的数据库操作技巧,并在实际项目中灵活应用。